package model;

import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity(name = "tb_funcionarios")
public class Funcionario {

	@Id
	@GeneratedValue
	@Column(name="ID")
	private long id;
	
	@OneToMany(mappedBy = "funcionario", cascade={CascadeType.ALL,CascadeType.REMOVE},fetch = FetchType.EAGER)
	private Set<Usuario> usuarios = new HashSet<Usuario>();

	@ManyToOne()
	private Loja loja;

	@ManyToOne()
	private Funcao funcao;

	@ManyToOne()
	private EstadoCivil civil;
	
	@ManyToOne()
	private Nacionalidade nacionalidade;
	
	@OneToMany(mappedBy = "funcionario", cascade={CascadeType.ALL,CascadeType.REMOVE},fetch = FetchType.EAGER)
	private Set<Tecnico> tecnico = new HashSet<Tecnico>();	
	
	@Column(name="NOME_COMPLETO")
	private String nomeCompleto;

	@Column(name = "DATA_NASCIMENTO")
	@Temporal(TemporalType.DATE)
	private Date dataNascimento;
	
	//@Column(name = "ESTADO_CIVIL", length = 50, nullable = false)
	//private String estadoCivil;
	
	@Column(name = "RG", length = 20, nullable = false)
	private String rg;
	
//	@Column(name = "NACIONALIDADE", length = 50, nullable = false)
	//private String nacionalidade;
	
	@Column(name = "CPF", length = 15, nullable = false)
	private String cpf;
	
	@Column(name = "TELEFONE_FIXO", length = 30, nullable = true)
	private String telefoneFixo;
	
	@Column(name = "CELULAR_PESSOAL", length = 30, nullable = false)
	private String celularPessoal;
	
	@Column(name = "EMAIL", length = 100, nullable = true)
	private String email;
	
	@Column(name = "DATA_ADMISAO" , nullable = false)
	@Temporal(TemporalType.DATE)
	private Date dataAdmisao;
	
	@Column(name = "SALARIO")
	private double salario;

	@Column(name = "CANCELADO", nullable = false)
	private boolean cancelado;

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public Set<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(Set<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public Loja getLoja() {
		return loja;
	}

	public void setLoja(Loja loja) {
		this.loja = loja;
	}

	public Funcao getFuncao() {
		return funcao;
	}

	public void setFuncao(Funcao funcao) {
		this.funcao = funcao;
	}

	public EstadoCivil getCivil() {
		return civil;
	}

	public void setCivil(EstadoCivil civil) {
		this.civil = civil;
	}

	public Nacionalidade getNacionalidade() {
		return nacionalidade;
	}

	public void setNacionalidade(Nacionalidade nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	public Set<Tecnico> getTecnico() {
		return tecnico;
	}

	public void setTecnico(Set<Tecnico> tecnico) {
		this.tecnico = tecnico;
	}

	public String getNomeCompleto() {
		return nomeCompleto;
	}

	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getTelefoneFixo() {
		return telefoneFixo;
	}

	public void setTelefoneFixo(String telefoneFixo) {
		this.telefoneFixo = telefoneFixo;
	}

	public String getCelularPessoal() {
		return celularPessoal;
	}

	public void setCelularPessoal(String celularPessoal) {
		this.celularPessoal = celularPessoal;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getDataAdmisao() {
		return dataAdmisao;
	}

	public void setDataAdmisao(Date dataAdmisao) {
		this.dataAdmisao = dataAdmisao;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public boolean isCancelado() {
		return cancelado;
	}

	public void setCancelado(boolean cancelado) {
		this.cancelado = cancelado;
	}

			
}
